package com.bjsxt.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class MyRedisTemplateConfiguration {
    /**
     * 创建一个RedisTemplate类型的对象。
     * spring boot starter data redis不会创建重复类型的RedisTemplate对象
     *
     * RedisTemplate是一个客户端对象，但是，要连接服务器的时候，需要连接工厂提供具体的连接Connection
     * spring data redis中的连接工厂类型是RedisConnectionFactory
     * spring boot starter data redis根据配置文件，自动创建连接工厂。
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // 配置连接工厂
        redisTemplate.setConnectionFactory(connectionFactory);
        // 配置key的序列化方案, 使用字符串序列化器。直接使用字符串作为key。
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // 配置value的序列化方案, 使用Jackson序列化器。Java对象->JSON格式字符串
        // GenericJackson2JsonRedisSerializer 序列化的JSON字符串是：
        // {"类型属性名":"属性值", "_class":"序列化的类型的包名.类名"}
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        return redisTemplate;
    }
}
